import type { App, Directive } from "vue";
import { useUserStore } from "@/pinia/stores/user";
import { isArray } from "@@/utils/validate";

/**
 * @name 权限指令
 * @description 和权限判断函数 checkPermission 功能类似
 */
const permission: Directive = {
  mounted(el, binding) {
    const { value: permissionRoles } = binding;
    const { roles } = useUserStore();
    if (isArray(permissionRoles) && permissionRoles.length > 0) {
      const hasPermission = roles.some(role => permissionRoles.includes(role));
      hasPermission || el.parentNode?.removeChild(el);
    } else {
      throw new Error(`参数必须是一个数组且长度大于 0，参考：v-permission="['admin','editor']"`);
    }
  }
};

export function installPermissionDirective(app: App) {
  app.directive("permission", permission);
}
